/** 用来创建 swagger文档对象 */
const swaggerJSDoc = require('swagger-jsdoc')
/** 用来创建展示API文档的UI界面 */
const swaggerUI = require('swagger-ui-express')

const { PORT } = require('./config')

/**
 * 设置 swagger文档的基础信息
 */

const swaggerDefinition = {
  openapi: '3.0.0',
  info: {
    title: 'Wechat Pay Doc',
    viersion: '1.0.0',
    description: "微信支付接口文档"
  },
  tags: [
    {
      name: 'Product',
      description: '产品管理'
    },
    {
      name: 'Order',
      description: '订单管理'
    },
    {
      name: 'Payment',
      description: '支付管理'
    },
  ],
  servers: [
    {
      url: 'http://localhost:' + PORT,
    }
  ]
}

/** swagger 选项 */
const options = {
  swaggerDefinition,
  apis: ['./routes/*.js'] // 指定 API 注释的文件路径
}

/** 配置项创建 swagger 文档规范对象 */
const swaggerSpec = swaggerJSDoc(options)

/** 导出一个函数，用于继承UI到 Express中使用 */
module.exports = app => {
  /** 在指定路径下生成 UI */
  // /swaggerUi.serve: 这是一个中间件函数，提供了必要的静态资源来展示 Swagger UI 页面
  //当访问 /api-docs 路径时，swaggerUi.serve 会处理对 Swagger UI 静态文件（如 HTML,CSS, JavaScript 文件等）的请求
  //swaggerUi.setup(swaggerSpec): 这也是一个中间件函数。它用于配置和初始化 Swagger UI页面。swaggerUi.setup 接受一个 Swagger 规范对象（在这个例子中是 swaggerSpec），并使用这个 对象来生成 API 文档的用户界面
  app.use('/api-docs', swaggerUI.serve, swaggerUI.setup(swaggerSpec))
}